/**
 * 聚合管道实现关联查询
 * OrderModel.aggregate([], (err, docs) => {})
 * 可以配置多个$lookup实现多个表的关联查询
 */

// 引入mongoose
const mongoose = require('mongoose')

// 连接数据库
// authSource=admin表示用认证来源是root管理员admin
mongoose.connect('mongodb://admin:123456@localhost/db01?authSource=admin')
const db = mongoose.connection
db.on('error', console.error.bind(console, 'connection error:')) 
db.once('open', () => {
  console.log('connection success')
})

// 定义schema 操作user表
const OrderSchema = mongoose.Schema({
  order_id: String,
  uid: Number,
  trade_no: String,
  all_price: Number,
  all_num: Number
})
const Order_itemSchema = mongoose.Schema({
  order_id: String,
  title: String,
  price: Number,
  num: Number
})

// 定义数据库模型 model第一个参数注意首字母大小，
// 与数据库表名对应（默认复数：users, 也可以指定第三个参数映射）
const OrderModel = mongoose.model('Order', OrderSchema, 'order')
const Order_itemModel = mongoose.model('Order_item', OrderSchema, 'order_item')

// 聚合管道表关联查询 订单找商品
// OrderModel.aggregate([
//   {
//     $lookup:
//       {
//         from: "order_item",
//         localField: "order_id",
//         foreignField: "order_id",
//         as: "items"
//       } 
//   },{
//     $match:{"all_price":{$gte:90}}
//   }
// ],(err, docs) => {
//   if(err) return console.log(err)
//   console.log(JSON.stringify(docs))
// })


// 通过商品找订单信息
// 6246b34edcd9bdf357e47ff1   mongoose.Types.ObjectId()转换id
Order_itemModel.aggregate([
  {
    $lookup:
      {
        from: "order",
        localField: "order_id",
        foreignField: "order_id",
        as: "order_info"
      } 
  },{
    $match:{"_id": mongoose.Types.ObjectId("6246b34edcd9bdf357e47ff1")}
  }
], (err, docs) => {
  if(err) return console.log(err)
  console.log(JSON.stringify(docs))
})